/*
 * Copyright 2007-2010 Jeremy Brown.
 *
 * Licensed under the Apache License, Version 2.0 (the "License")
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @author <a href="http://jeremy-brown.com">Jeremy Brown</a>
 */


package groovy.prefuse.factory

import prefuse.data.Table
import prefuse.data.Graph

public class ColumnFactory extends AbstractFactory
{
	boolean isLeaf()
	{
		return true
	}
    
    public Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes) throws InstantiationException, IllegalAccessException
	{
		def parentTable = builder.getCurrent() //get this node's parent node - getParentNode() returns grandparent node when used in the newInstance(...) method
		
		if(value == null)
		{
			value = attributes.remove("name")
		}
		
		if(builder.mapContainsKeys(attributes, ["type", "default"]))
		{
			parentTable.addColumn(value, attributes.remove("type"), attributes.remove("default"))
		}
		else if(builder.mapContainsKeys(attributes, ["type"]))
		{
			parentTable.addColumn(value, attributes.remove("type"))
		}
		else if(builder.mapContainsKeys(attributes, ["expression"]))
		{
			parentTable.addColumn(value, attributes.remove("expression"))
		}
		else if(builder.mapContainsKeys(attributes, ["column"]))
		{
			parentTable.addColumn(value, attributes.remove("column"))
		}
		
		return parentTable.getColumn(value)
	}

}
